package com.dycong.common.network;

import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;


/**
 * Created by dycong on 2017/3/8.
 */
public class RequestHandle {

    private static final Logger log= LoggerFactory.getLogger(RequestHandle.class);
    /***
     * Compatible with GET and POST
     *
     * @param request
     * @return : <code>byte[]</code>
     * @throws IOException
     */
    public static byte[] getRequestQuery(HttpServletRequest request)
            throws IOException {
        String submitMehtod = request.getMethod();
        String queryString = null;

        if (submitMehtod.equals("GET")) {// GET 说明：当请求方式为“Get”时，直接使用request.getQueryString()获取String
            queryString = request.getQueryString();
            String charEncoding = request.getCharacterEncoding();// charset
            if (charEncoding == null) {
                charEncoding = "UTF-8";
            }
            return queryString.getBytes(charEncoding);
        } else {// POST  当请求方式为“Post”时，读取InputStream（request.getInputStream()）
            return getRequestPostBytes(request);
        }
    }

    /***
     * Get request query string, form method : post
     *
     * @param request
     * @return byte[]
     * @throws IOException
     */
    public static byte[] getRequestPostBytes(HttpServletRequest request)
            throws IOException {
        int contentLength = request.getContentLength();
        if (contentLength < 0) {
            return null;
        }
        byte buffer[] = new byte[contentLength];
        for (int i = 0; i < contentLength; ) {

            int readlen = request.getInputStream().read(buffer, i,
                    contentLength - i);
            if (readlen == -1) {
                break;
            }
            i += readlen;
        }
        return buffer;
    }

    /***
     * Get request query string, form method : post
     *
     * @param request
     * @return
     * @throws IOException
     */
    public static String getRequestPostStr(HttpServletRequest request)
            throws IOException {
        byte buffer[] = getRequestPostBytes(request);
        String charEncoding = request.getCharacterEncoding();
        if (charEncoding == null) {
            charEncoding = "UTF-8";
        }
        return new String(buffer, charEncoding);
    }

    public Object handle(HttpServletRequest request) {
        String charEncoding = request.getCharacterEncoding();
        String requestJson = "";
        charEncoding = charEncoding == null ? "UTF-8" : charEncoding;
        try {
            requestJson = IOUtils.toString(request.getInputStream(), charEncoding);
        } catch (IOException e) {
            log.error("request handling",e);
        }
        return requestJson;
    }
}
